package main

import (
	"fiber-server/database"
	"fiber-server/user"
	"fmt"

	"github.com/gofiber/fiber/v2"
	"gorm.io/driver/mysql"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

// setup routes
func setupRoutes(app *fiber.App) {
	r := app.Group("/api/v1")
	r.Post("/login", user.Login)
	r.Get("/users", user.GetUsers)
	r.Get("/user/:id", user.GetUser)
	r.Post("/user", user.NewUser)
	r.Put("/user/:id", user.UpdateUser)
	r.Delete("/user/:id", user.DeleteUser)
}

// init sqlite3
func initSqlite3() {
	var err error
	database.DBConn, err = gorm.Open(sqlite.Open("./sqlite3-dbs/user.db"), &gorm.Config{})
	if err != nil {
		panic("Failed to connect to database")
	}
	fmt.Println("sqlite3 database connection successfully opened!")

	// 数据库迁移表结构映射
	database.DBConn.AutoMigrate(&user.User{})

	fmt.Println("Database Migrated")
}

// init mysql
func initMysql() {
	var err error
	dns := "root:root@(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	database.DBConn, err = gorm.Open(mysql.Open(dns), &gorm.Config{})
	if err != nil {
		panic("mysql content faild, err:")
	}
	fmt.Println("mysql database connection successfully opened!")

	// 数据库迁移表结构映射
	database.DBConn.AutoMigrate(&user.User{})

	fmt.Println("Database Migrated")
}

// Fiber是一个受到Express启发的Web框架
// 建立在Go语言写的最快的FasthttpHTTP引擎的基础上。
// 旨在简化 零内存分配和提高性能，以便快速开发。
// 据说性能秒杀一概go下的web框架，只有fasthttp能略略领先。
// Fiber框架支持丰富的中间件和第三方中间
// gorm: https://gorm.io/docs/
func main() {
	app := fiber.New()

	// 初始化数据库
	// initSqlite3()

	initMysql()

	// 注册路由表
	setupRoutes(app)

	// 静态资源
	app.Static("/", "./public")
	app.Static("/static", "./public")

	app.Listen(":3000")
}
